unit selpresup;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, DB, Grids, DBGrids, ExtCtrls, RXDBCtrl;

type
  TfrmSelPresup = class(TForm)
    sPresup: TDataSource;
    Panel1: TPanel;
    Panel2: TPanel;
    BitBtn2: TBitBtn;
    BitBtn1: TBitBtn;
    Panel71: TPanel;
    Label12: TLabel;
    edtFiltro: TEdit;
    btnDesfiltrar: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    sTipologia: TDataSource;
    rdg: TRadioGroup;
    grdPresup: TRxDBGrid;
    grdTipologia: TRxDBGrid;
    id: TEdit;
    Label3: TLabel;
    procedure grdPresupDblClick(Sender: TObject);
    procedure grdPresupTitleClick(Column: TColumn);
    procedure FormCreate(Sender: TObject);
    procedure btnDesfiltrarClick(Sender: TObject);
    procedure edtFiltroChange(Sender: TObject);
    procedure sTipologiaDataChange(Sender: TObject; Field: TField);
    procedure rdgClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    FnombreObra: string;
    Fidusuario: word;
    function RecuperarIdPresup: integer;
    procedure Seleccionar(Sender: TObject);
    procedure SetnombreObra(const Value: string);
    procedure Setidusuario(const Value: word);
  published
    property nombreObra: string read FnombreObra write SetnombreObra;
    property idusuario: word read Fidusuario write Setidusuario;
  public
    property idPresup: integer read RecuperarIdPresup;
    function Entrar(tipo, idUs: word) : integer;
  end;

var
  frmSelPresup: TfrmSelPresup;

implementation

uses MDatos, Recursos;

{$R *.dfm}

function TfrmSelPresup.RecuperarIdPresup: integer;
begin
  //Result := Datos.qryVar.Fields [0].AsInteger;
  if (self.id.Text = '') then
  begin
    self.nombreObra :=  Datos.qryVar5.Fields [1].AsString;
    result := Datos.qryVar5.Fields [0].AsInteger;
  end
  else
    result := strToInt(self.id.Text);
end;

function TfrmSelPresup.Entrar(tipo, idUs: word) : integer;
var
  filtrar : boolean;
  filtro : string;
begin
  rdg.ItemIndex := 3;
  filtrar := True;
  if (tipo = 0) then  //Se trata de un presupuesto
    filtro := 'TIPOLOGIA <> ''COMBINADO'''
  else if (tipo = 1) then //Se trata de un presupuesto combinado
    filtro := 'TIPOLOGIA = ''COMBINADO'''
  else if (tipo = 2) then  //Se trata de una obra
    filtrar := False
  else if (tipo = 3) then  //Se trata de una vista
    filtro := 'TIPOLOGIA <> ''COMBINADO''';
  Datos.cTipologia.Open;
  if filtrar then
    Datos.cTipologia.Filter := filtro;
  Datos.cTipologia.Filtered := filtrar;
  if not Datos.cTipologia.IsEmpty then
  begin
    self.idusuario := idUs;
    Seleccionar(nil);
    result := ShowModal;
  end
  else
  begin
    Datos.cTipologia.Close;
    result := 0;
  end;
end;

procedure TfrmSelPresup.Seleccionar(Sender: TObject);
var
  sql, strAux : string;
begin
  if Datos.cTipologia.State in [dsInactive] then
    Datos.cTipologia.Open;
  strAux := '';
  if not((self.idusuario = 0) or (self.idusuario = 4)
  or (self.idusuario = 9) or (self.idusuario = 1)) then   //0: administrador, 4: Norberto, 9: Jorge, 1: Eduardo
    strAux := ' and idUsuario = '+IntToStr(self.idusuario); 
  if (rdg.ItemIndex = 0) then //Todos
    sql := 'SELECT P.id_presupuesto, P.denominacion, P.direccion FROM presupuesto P LEFT JOIN obra O '
    +'ON (P.id_presupuesto = O.id_obra) '
    +'WHERE P.id_tipologia = '+Datos.cTipologiaID_TIPOLOGIA.AsString + strAux + 'ORDER BY P.id_presupuesto desc'
  else if (rdg.ItemIndex = 1) then  //Sin aprobar
    sql := 'SELECT id_presupuesto, denominacion, direccion FROM presupuesto WHERE id_tipologia = '+
    Datos.cTipologiaID_TIPOLOGIA.AsString + ' and aprobado = ''0'''
    + strAux + 'ORDER BY P.id_presupuesto desc'
  else if (rdg.ItemIndex = 2) then  //Aprobados
    sql := 'SELECT id_presupuesto, denominacion, direccion FROM presupuesto WHERE id_tipologia = '+
    Datos.cTipologiaID_TIPOLOGIA.AsString + ' and aprobado = ''1'''
    + strAux + 'ORDER BY P.id_presupuesto desc'
  else            //Terminados
    sql := 'SELECT P.id_presupuesto, P.denominacion, P.direccion FROM presupuesto P LEFT JOIN obra O '
    +'ON (P.id_presupuesto = O.id_obra) '
    +'WHERE O.estado = ''2'' AND P.id_tipologia = '+Datos.cTipologiaID_TIPOLOGIA.AsString + strAux + 'ORDER BY P.id_presupuesto desc';
  //EjecutarSql(Datos.qryVar, sql);
  EjecutarSql(Datos.qryVar5, sql);
  edtFiltro.OnChange (Sender);
end;

procedure TfrmSelPresup.grdPresupDblClick(Sender: TObject);
begin
  ModalResult := mrOk;
end;

procedure TfrmSelPresup.grdPresupTitleClick(Column: TColumn);
begin
  //Datos.qryVar.IndexFieldNames := Column.FieldName;
  Datos.qryVar5.IndexFieldNames := Column.FieldName;
end;

procedure TfrmSelPresup.FormCreate(Sender: TObject);
begin
  Acomodo(frmSelPresup);
end;

procedure TfrmSelPresup.btnDesfiltrarClick(Sender: TObject);
begin
  edtFiltro.Text := '';
end;

procedure TfrmSelPresup.edtFiltroChange(Sender: TObject);
begin
  //filtro(Datos.qryVar, edtFiltro.Text, 'denominacion');
  //btnDesfiltrar.Enabled := Datos.qryVar.Filtered;
  filtro(Datos.qryVar5, edtFiltro.Text, 'DENOMINACION');
  btnDesfiltrar.Enabled := Datos.qryVar5.Filtered;
end;

procedure TfrmSelPresup.sTipologiaDataChange(Sender: TObject;
  Field: TField);
begin
  if frmSelPresup.Visible then
    Seleccionar(Sender);
end;

procedure TfrmSelPresup.rdgClick(Sender: TObject);
begin
  Seleccionar(Sender);
end;

procedure TfrmSelPresup.SetnombreObra(const Value: string);
begin
  FnombreObra := Value;
end;

procedure TfrmSelPresup.Setidusuario(const Value: word);
begin
  Fidusuario := Value;
end;

procedure TfrmSelPresup.FormShow(Sender: TObject);
begin
  self.id.Clear;
end;

end.
